home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / CD32 / CD32_Support / examples / SA_Examples / lowlevel / ReadJoyPort / gui.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-31  |  21.2 KB  |  767 lines

  1. /*
  2.  * System includes
  3.  */
  4.  
  5. #include <exec/types.h>
  6. #include <exec/memory.h>
  7.  
  8. #include <dos/dos.h>
  9.  
  10. #include <intuition/intuition.h>
  11. #include <intuition/gadgetclass.h>
  12.  
  13. #include <libraries/gadtools.h>
  14.  
  15. #include <libraries/lowlevel.h>
  16.  
  17. #include <clib/exec_protos.h>
  18. #include <clib/dos_protos.h>
  19. #include <clib/graphics_protos.h>
  20. #include <clib/intuition_protos.h>
  21. #include <clib/gadtools_protos.h>
  22. #include <clib/lowlevel_protos.h>
  23.  
  24. #include <pragmas/lowlevel_pragmas.h>
  25.  
  26. /*
  27.  * ANSI includes
  28.  */
  29.  
  30. #include <stdio.h>
  31. #include <stdlib.h>
  32. #include <string.h>
  33.  
  34. /*
  35.  * Local includes
  36.  */
  37.  
  38. #include "readjoyport.h"
  39.  
  40. /****** ReadJoyPort/guiOpen ******************************************
  41. *
  42. *   NAME
  43. *       guiOpen -- open graphical user interface
  44. *
  45. *   SYNOPSIS
  46. *       success=guiOpen();
  47. *
  48. *       BOOL guiOpen(void);
  49. *
  50. *   FUNCTION
  51. *       Open graphical user interface.
  52. *
  53. *   INPUTS
  54. *       None
  55. *
  56. *   RESULT
  57. *       success -- TRUE if success; FALSE if failure
  58. *
  59. *   EXAMPLE
  60. *
  61. *   NOTES
  62. *
  63. *   BUGS
  64. *
  65. *   SEE ALSO
  66. *       guiClose()
  67. *
  68. ******************************************************************************
  69. *
  70. */
  71. BOOL guiOpen(void)
  72. {
  73.  
  74.     struct NewGadget newGadget;
  75.     struct Gadget *previousGadget;
  76.  
  77.     static struct TextAttr textAttr ={
  78.         GUI_TYPEFACE, /* ta_Name */
  79.         GUI_TYPESIZE, /* ta_YSize */
  80.         NULL, /* ta_Style */
  81.         NULL  /* ta_Flags */
  82.     };
  83.  
  84.     static UBYTE *modeState[] ={
  85.         "Game Controller",
  86.         "Mouse",
  87.         "Joystick",
  88.         "Autosense",
  89.         NULL
  90.     };
  91.  
  92.     /*
  93.      * Open window
  94.      */
  95.  
  96.     /* Open window */
  97.     window=OpenWindowTags(NULL,
  98.         WA_Title, PROGRAM_NAME,
  99.         WA_InnerWidth, 386,
  100.         WA_InnerHeight, 168,
  101.         WA_DragBar, TRUE,
  102.         WA_CloseGadget, TRUE,
  103.         WA_DepthGadget, TRUE,
  104.         WA_Activate, TRUE,
  105.         WA_SimpleRefresh, TRUE,
  106.         WA_RMBTrap, TRUE,
  107.         WA_IDCMP, IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|
  108.             INTEGERIDCMP|NUMBERIDCMP|BUTTONIDCMP|TEXTIDCMP|CHECKBOXIDCMP|CYCLEIDCMP,
  109.         TAG_DONE);
  110.     if (!window) {
  111.         return(FALSE);
  112.     }
  113.  
  114.     /* Fetch visual info */
  115.     visualInfo=GetVisualInfo(window->WScreen,TAG_DONE);
  116.     if (!visualInfo) {
  117.         return(FALSE);
  118.     }
  119.  
  120.     /* Create gadtools.library context */
  121.     previousGadget=gadgetList=CreateContext(&gadgetList);
  122.     if (!gadgetList) {
  123.         return(FALSE);
  124.     }
  125.  
  126.     /*
  127.      * Create gadgetry
  128.      */
  129.  
  130.     /* Port gadget */
  131.     newGadget.ng_LeftEdge=window->BorderLeft+48;
  132.     newGadget.ng_TopEdge=window->BorderTop+8;
  133.     newGadget.ng_Width=32;
  134.     newGadget.ng_Height=16;
  135.     newGadget.ng_GadgetText="Port";
  136.     newGadget.ng_TextAttr=&textAttr;
  137.     newGadget.ng_GadgetID=GUI_PORT_ID;
  138.     newGadget.ng_Flags=PLACETEXT_LEFT;
  139.     newGadget.ng_VisualInfo=visualInfo;
  140.     newGadget.ng_UserData=NULL;
  141.     previousGadget=portGadget=CreateGadget(INTEGER_KIND,
  142.         previousGadget,&newGadget,
  143.         GTIN_Number, portNumber,
  144.         TAG_DONE);
  145.     if (!previousGadget) {
  146.         return(FALSE);
  147.     }
  148.  
  149.     /* Type gadget */
  150.     newGadget.ng_LeftEdge=window->BorderLeft+128;
  151.     newGadget.ng_TopEdge=window->BorderTop+8;
  152.     newGadget.ng_Width=248;
  153.     newGadget.ng_Height=16;
  154.     newGadget.ng_GadgetText="Type";
  155.     newGadget.ng_TextAttr=&textAttr;
  156.     newGadget.ng_GadgetID=GUI_TYPE_ID;
  157.     newGadget.ng_Flags=PLACETEXT_LEFT;
  158.     newGadget.ng_VisualInfo=visualInfo;
  159.     newGadget.ng_UserData=NULL;
  160.     previousGadget=typeGadget=CreateGadget(TEXT_KIND,
  161.         previousGadget,&newGadget,
  162.         GTTX_Border, TRUE,
  163.         TAG_DONE);
  164.     if (!previousGadget) {
  165.         return(FALSE);
  166.     }
  167.  
  168.     /* Sticky gadget */
  169.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  170.     newGadget.ng_TopEdge=window->BorderTop+44;
  171.     newGadget.ng_Width=26;
  172.     newGadget.ng_Height=11;
  173.     newGadget.ng_GadgetText="Sticky";
  174.     newGadget.ng_TextAttr=&textAttr;
  175.     newGadget.ng_GadgetID=GUI_STICKY_ID;
  176.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  177.     newGadget.ng_VisualInfo=visualInfo;
  178.     newGadget.ng_UserData=NULL;
  179.     previousGadget=stickyGadget=CreateGadget(CHECKBOX_KIND,
  180.         previousGadget,&newGadget,
  181.         GTCB_Checked, sticky,
  182.         TAG_DONE);
  183.     if (!previousGadget) {
  184.         return(FALSE);
  185.     }
  186.  
  187.     /* Reset gadget */
  188.     newGadget.ng_LeftEdge=window->BorderLeft+96;
  189.     newGadget.ng_TopEdge=window->BorderTop+42;
  190.     newGadget.ng_Width=80;
  191.     newGadget.ng_Height=16;
  192.     newGadget.ng_GadgetText="Reset";
  193.     newGadget.ng_TextAttr=&textAttr;
  194.     newGadget.ng_GadgetID=GUI_RESET_ID;
  195.     newGadget.ng_Flags=PLACETEXT_IN;
  196.     newGadget.ng_VisualInfo=visualInfo;
  197.     newGadget.ng_UserData=NULL;
  198.     previousGadget=resetGadget=CreateGadget(BUTTON_KIND,
  199.         previousGadget, &newGadget,
  200.         TAG_DONE);
  201.  
  202.     /* Mode gadget */
  203.     newGadget.ng_LeftEdge=window->BorderLeft+224;
  204.     newGadget.ng_TopEdge=window->BorderTop+42;
  205.     newGadget.ng_Width=152;
  206.     newGadget.ng_Height=16;
  207.     newGadget.ng_GadgetText="Mode";
  208.     newGadget.ng_TextAttr=&textAttr;
  209.     newGadget.ng_GadgetID=GUI_MODE_ID;
  210.     newGadget.ng_Flags=PLACETEXT_LEFT;
  211.     newGadget.ng_VisualInfo=visualInfo;
  212.     previousGadget=modeGadget=CreateGadget(CYCLE_KIND,
  213.         previousGadget, &newGadget,
  214.         GTCY_Labels, modeState,
  215.         GTCY_Active, mode,
  216.         TAG_DONE);
  217.  
  218.     /* Btn 1 gadget */
  219.     newGadget.ng_LeftEdge=window->BorderLeft+304;
  220.     newGadget.ng_TopEdge=window->BorderTop+112;
  221.     newGadget.ng_Width=26;
  222.     newGadget.ng_Height=11;
  223.     newGadget.ng_GadgetText="Btn 1";
  224.     newGadget.ng_TextAttr=&textAttr;
  225.     newGadget.ng_GadgetID=GUI_BTN1_ID;
  226.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  227.     newGadget.ng_VisualInfo=visualInfo;
  228.     newGadget.ng_UserData=NULL;
  229.     previousGadget=btn1Gadget=CreateGadget(CHECKBOX_KIND,
  230.         previousGadget,&newGadget,
  231.         GA_Disabled, TRUE,
  232.         TAG_DONE);
  233.     if (!previousGadget) {
  234.         return(FALSE);
  235.     }
  236.  
  237.  
  238.     /* Btn 2 gadget */
  239.     newGadget.ng_LeftEdge=window->BorderLeft+224;
  240.     newGadget.ng_TopEdge=window->BorderTop+112;
  241.     newGadget.ng_Width=26;
  242.     newGadget.ng_Height=11;
  243.     newGadget.ng_GadgetText="Btn 2";
  244.     newGadget.ng_TextAttr=&textAttr;
  245.     newGadget.ng_GadgetID=GUI_BTN2_ID;
  246.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  247.     newGadget.ng_VisualInfo=visualInfo;
  248.     newGadget.ng_UserData=NULL;
  249.     previousGadget=btn2Gadget=CreateGadget(CHECKBOX_KIND,
  250.         previousGadget,&newGadget,
  251.         GA_Disabled, TRUE,
  252.         TAG_DONE);
  253.     if (!previousGadget) {
  254.         return(FALSE);
  255.     }
  256.  
  257.     /* Btn 3 gadget */
  258.     newGadget.ng_LeftEdge=window->BorderLeft+304;
  259.     newGadget.ng_TopEdge=window->BorderTop+88;
  260.     newGadget.ng_Width=26;
  261.     newGadget.ng_Height=11;
  262.     newGadget.ng_GadgetText="Btn 3";
  263.     newGadget.ng_TextAttr=&textAttr;
  264.     newGadget.ng_GadgetID=GUI_BTN3_ID;
  265.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  266.     newGadget.ng_VisualInfo=visualInfo;
  267.     newGadget.ng_UserData=NULL;
  268.     previousGadget=btn3Gadget=CreateGadget(CHECKBOX_KIND,
  269.         previousGadget,&newGadget,
  270.         GA_Disabled, TRUE,
  271.         TAG_DONE);
  272.     if (!previousGadget) {
  273.         return(FALSE);
  274.     }
  275.  
  276.     /* Btn 4 gadget */
  277.     newGadget.ng_LeftEdge=window->BorderLeft+224;
  278.     newGadget.ng_TopEdge=window->BorderTop+88;
  279.     newGadget.ng_Width=26;
  280.     newGadget.ng_Height=11;
  281.     newGadget.ng_GadgetText="Btn 4";
  282.     newGadget.ng_TextAttr=&textAttr;
  283.     newGadget.ng_GadgetID=GUI_BTN4_ID;
  284.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  285.     newGadget.ng_VisualInfo=visualInfo;
  286.     newGadget.ng_UserData=NULL;
  287.     previousGadget=btn4Gadget=CreateGadget(CHECKBOX_KIND,
  288.         previousGadget,&newGadget,
  289.         GA_Disabled, TRUE,
  290.         TAG_DONE);
  291.     if (!previousGadget) {
  292.         return(FALSE);
  293.     }
  294.  
  295.     /* Btn 5 gadget */
  296.     newGadget.ng_LeftEdge=window->BorderLeft+264;
  297.     newGadget.ng_TopEdge=window->BorderTop+64;
  298.     newGadget.ng_Width=26;
  299.     newGadget.ng_Height=11;
  300.     newGadget.ng_GadgetText="Btn 5";
  301.     newGadget.ng_TextAttr=&textAttr;
  302.     newGadget.ng_GadgetID=GUI_BTN5_ID;
  303.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  304.     newGadget.ng_VisualInfo=visualInfo;
  305.     newGadget.ng_UserData=NULL;
  306.     previousGadget=btn5Gadget=CreateGadget(CHECKBOX_KIND,
  307.         previousGadget,&newGadget,
  308.         GA_Disabled, TRUE,
  309.         TAG_DONE);
  310.     if (!previousGadget) {
  311.         return(FALSE);
  312.     }
  313.  
  314.     /* Btn 6 gadget */
  315.     newGadget.ng_LeftEdge=window->BorderLeft+48;
  316.     newGadget.ng_TopEdge=window->BorderTop+64;
  317.     newGadget.ng_Width=26;
  318.     newGadget.ng_Height=11;
  319.     newGadget.ng_GadgetText="Btn 6";
  320.     newGadget.ng_TextAttr=&textAttr;
  321.     newGadget.ng_GadgetID=GUI_BTN6_ID;
  322.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  323.     newGadget.ng_VisualInfo=visualInfo;
  324.     newGadget.ng_UserData=NULL;
  325.     previousGadget=btn6Gadget=CreateGadget(CHECKBOX_KIND,
  326.         previousGadget,&newGadget,
  327.         GA_Disabled, TRUE,
  328.         TAG_DONE);
  329.     if (!previousGadget) {
  330.         return(FALSE);
  331.     }
  332.  
  333.     /* Btn 7 gadget */
  334.     newGadget.ng_LeftEdge=window->BorderLeft+144;
  335.     newGadget.ng_TopEdge=window->BorderTop+120;
  336.     newGadget.ng_Width=26;
  337.     newGadget.ng_Height=11;
  338.     newGadget.ng_GadgetText="Btn 7";
  339.     newGadget.ng_TextAttr=&textAttr;
  340.     newGadget.ng_GadgetID=GUI_BTN6_ID;
  341.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  342.     newGadget.ng_VisualInfo=visualInfo;
  343.     newGadget.ng_UserData=NULL;
  344.     previousGadget=btn7Gadget=CreateGadget(CHECKBOX_KIND,
  345.         previousGadget,&newGadget,
  346.         GA_Disabled, TRUE,
  347.         TAG_DONE);
  348.     if (!previousGadget) {
  349.         return(FALSE);
  350.     }
  351.  
  352.     /* Up gadget */
  353.     newGadget.ng_LeftEdge=window->BorderLeft+48;
  354.     newGadget.ng_TopEdge=window->BorderTop+88;
  355.     newGadget.ng_Width=26;
  356.     newGadget.ng_Height=11;
  357.     newGadget.ng_GadgetText="Up";
  358.     newGadget.ng_TextAttr=&textAttr;
  359.     newGadget.ng_GadgetID=GUI_UP_ID;
  360.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  361.     newGadget.ng_VisualInfo=visualInfo;
  362.     newGadget.ng_UserData=NULL;
  363.     previousGadget=upGadget=CreateGadget(CHECKBOX_KIND,
  364.         previousGadget,&newGadget,
  365.         GA_Disabled, TRUE,
  366.         TAG_DONE);
  367.     if (!previousGadget) {
  368.         return(FALSE);
  369.     }
  370.  
  371.     /* Down gadget */
  372.     newGadget.ng_LeftEdge=window->BorderLeft+48;
  373.     newGadget.ng_TopEdge=window->BorderTop+120;
  374.     newGadget.ng_Width=26;
  375.     newGadget.ng_Height=11;
  376.     newGadget.ng_GadgetText="Down";
  377.     newGadget.ng_TextAttr=&textAttr;
  378.     newGadget.ng_GadgetID=GUI_DOWN_ID;
  379.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  380.     newGadget.ng_VisualInfo=visualInfo;
  381.     newGadget.ng_UserData=NULL;
  382.     previousGadget=downGadget=CreateGadget(CHECKBOX_KIND,
  383.         previousGadget,&newGadget,
  384.         GA_Disabled, TRUE,
  385.         TAG_DONE);
  386.     if (!previousGadget) {
  387.         return(FALSE);
  388.     }
  389.  
  390.     /* Left gadget */
  391.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  392.     newGadget.ng_TopEdge=window->BorderTop+104;
  393.     newGadget.ng_Width=26;
  394.     newGadget.ng_Height=11;
  395.     newGadget.ng_GadgetText="Left";
  396.     newGadget.ng_TextAttr=&textAttr;
  397.     newGadget.ng_GadgetID=GUI_LEFT_ID;
  398.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  399.     newGadget.ng_VisualInfo=visualInfo;
  400.     newGadget.ng_UserData=NULL;
  401.     previousGadget=leftGadget=CreateGadget(CHECKBOX_KIND,
  402.         previousGadget,&newGadget,
  403.         GA_Disabled, TRUE,
  404.         TAG_DONE);
  405.     if (!previousGadget) {
  406.         return(FALSE);
  407.     }
  408.  
  409.     /* Right gadget */
  410.     newGadget.ng_LeftEdge=window->BorderLeft+80;
  411.     newGadget.ng_TopEdge=window->BorderTop+104;
  412.     newGadget.ng_Width=26;
  413.     newGadget.ng_Height=11;
  414.     newGadget.ng_GadgetText="Right";
  415.     newGadget.ng_TextAttr=&textAttr;
  416.     newGadget.ng_GadgetID=GUI_UP_ID;
  417.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  418.     newGadget.ng_VisualInfo=visualInfo;
  419.     newGadget.ng_UserData=NULL;
  420.     previousGadget=rightGadget=CreateGadget(CHECKBOX_KIND,
  421.         previousGadget,&newGadget,
  422.         GA_Disabled, TRUE,
  423.         TAG_DONE);
  424.     if (!previousGadget) {
  425.         return(FALSE);
  426.     }
  427.  
  428.     /* Vertical gadget */
  429.     newGadget.ng_LeftEdge=window->BorderLeft+80;
  430.     newGadget.ng_TopEdge=window->BorderTop+144;
  431.     newGadget.ng_Width=96;
  432.     newGadget.ng_Height=16;
  433.     newGadget.ng_GadgetText="Vertical";
  434.     newGadget.ng_TextAttr=&textAttr;
  435.     newGadget.ng_GadgetID=GUI_VERTICAL_ID;
  436.     newGadget.ng_Flags=PLACETEXT_LEFT;
  437.     newGadget.ng_VisualInfo=visualInfo;
  438.     newGadget.ng_UserData=NULL;
  439.     previousGadget=verticalGadget=CreateGadget(NUMBER_KIND,
  440.         previousGadget,&newGadget,
  441.         GTNM_Border, TRUE,
  442.         TAG_DONE);
  443.     if (!previousGadget) {
  444.         return(FALSE);
  445.     }
  446.  
  447.     /* Horizontal gadget */
  448.     newGadget.ng_LeftEdge=window->BorderLeft+280;
  449.     newGadget.ng_TopEdge=window->BorderTop+144;
  450.     newGadget.ng_Width=96;
  451.     newGadget.ng_Height=16;
  452.     newGadget.ng_GadgetText="Horizontal";
  453.     newGadget.ng_TextAttr=&textAttr;
  454.     newGadget.ng_GadgetID=GUI_HORIZONTAL_ID;
  455.     newGadget.ng_Flags=PLACETEXT_LEFT;
  456.     newGadget.ng_VisualInfo=visualInfo;
  457.     newGadget.ng_UserData=NULL;
  458.     previousGadget=horizontalGadget=CreateGadget(NUMBER_KIND,
  459.         previousGadget,&newGadget,
  460.         GTNM_Border, TRUE,
  461.         TAG_DONE);
  462.     if (!previousGadget) {
  463.         return(FALSE);
  464.     }
  465.  
  466.     /*
  467.      * Attach gadgetry
  468.      */
  469.  
  470.     /* Add gadget list to window */
  471.     AddGList(window,gadgetList,-1,-1,NULL);
  472.  
  473.     /* Refresh gadgetry */
  474.     RefreshGList(gadgetList,window,NULL,-1);
  475.     GT_RefreshWindow(window,NULL);
  476.  
  477.     /*
  478.      * Success
  479.      */
  480.  
  481.     /* Success */
  482.     return(TRUE);
  483.  
  484. }
  485.  
  486. /****** ReadJoyPort/guiClose ******************************************
  487. *
  488. *   NAME
  489. *       guiClose -- close graphical user interface
  490. *
  491. *   SYNOPSIS
  492. *       guiClose();
  493. *
  494. *       void guiClose(void);
  495. *
  496. *   FUNCTION
  497. *       Close graphical user interface.
  498. *
  499. *   INPUTS
  500. *       None
  501. *
  502. *   RESULT
  503. *       None
  504. *
  505. *   EXAMPLE
  506. *
  507. *   NOTES
  508. *
  509. *   BUGS
  510. *
  511. *   SEE ALSO
  512. *       guiOpen()
  513. *
  514. ******************************************************************************
  515. *
  516. */
  517. void guiClose(void)
  518. {
  519.  
  520.     /* If intuition.library and gadtools.library open ... */
  521.     if (IntuitionBase && GadtoolsBase) {
  522.  
  523.         /* If window open ... */
  524.         if (window) {
  525.  
  526.             /* If visual info ... */
  527.             if (visualInfo) {
  528.  
  529.                 /* If gadgets created ... */
  530.                 if (gadgetList) {
  531.  
  532.                     /* Remove gadgetry from window */
  533.                     RemoveGList(window,gadgetList,-1);
  534.  
  535.                     /* Free gadgetry */
  536.                     FreeGadgets(gadgetList);
  537.  
  538.                 }
  539.  
  540.                 /* Free visual info */
  541.                 FreeVisualInfo(visualInfo);
  542.  
  543.             }
  544.  
  545.             /* Close window */
  546.             CloseWindow(window);
  547.  
  548.         }
  549.  
  550.     }
  551.  
  552. }
  553.  
  554. /****** ReadJoyPort/guiLoop ******************************************
  555. *
  556. *   NAME
  557. *       guiLoop -- event loop for graphical user interface
  558. *
  559. *   SYNOPSIS
  560. *       guiLoop();
  561. *
  562. *       void guiLoop(void);
  563. *
  564. *   FUNCTION
  565. *       Event loop for graphical user interface.
  566. *
  567. *   INPUTS
  568. *       None
  569. *
  570. *   RESULT
  571. *       None
  572. *
  573. *   EXAMPLE
  574. *
  575. *   NOTES
  576. *
  577. *   BUGS
  578. *
  579. *   SEE ALSO
  580. *
  581. ******************************************************************************
  582. *
  583. */
  584. void guiLoop(void)
  585. {
  586.  
  587.     struct IntuiMessage *imsg;
  588.     ULONG class;
  589.     USHORT code;
  590.     APTR iaddress;
  591.  
  592.     if (debugMode) {
  593.         Printf("ReadJoyPort/guiLoop(): Entry\n");
  594.     }
  595.  
  596.     /* Endless loop */
  597.     FOREVER {
  598.  
  599.         /* Wait for top of frame */
  600.         WaitTOF();
  601.  
  602.         /* Poll game controller port */
  603.         pollPort();
  604.  
  605.         /* Process window message queue (if any) */
  606.         while (imsg=GT_GetIMsg(window->UserPort)) {
  607.  
  608.             /* Fetch fields from message */
  609.             class=imsg->Class;
  610.             code=imsg->Code;
  611.             iaddress=imsg->IAddress;
  612.  
  613.             /* Reply to message */
  614.             GT_ReplyIMsg(imsg);
  615.  
  616.             /* Switch on class */
  617.             switch (class) {
  618.  
  619.                 /* Window close event */
  620.                 case IDCMP_CLOSEWINDOW:
  621.                     /* Exit event loop */
  622.                     if (debugMode) {
  623.                         Printf("ReadJoyPort/guiLoop(): IDCMP_CLOSEWINDOW\n");
  624.                         Printf("ReadJoyPort/guiLoop(): Exiting\n");
  625.                     }
  626.                     return;
  627.  
  628.                 /* Window refresh event */
  629.                 case IDCMP_REFRESHWINDOW:
  630.                     /* Refresh window */
  631.                     GT_BeginRefresh(window);
  632.                     GT_EndRefresh(window,TRUE);
  633.                     break;
  634.  
  635.                 /* Window gadget event */
  636.                 case IDCMP_GADGETUP:
  637.                     {
  638.                         struct Gadget *gadget;
  639.  
  640.                         /* Fetch gadget address */
  641.                         gadget=iaddress;
  642.  
  643.                         /* Switch on gadget ID */
  644.                         switch (gadget->GadgetID) {
  645.  
  646.                             /* Port gadget */
  647.                             case GUI_PORT_ID:
  648.  
  649.                                 /* Get port number */
  650.                                 GT_GetGadgetAttrs(portGadget,window,NULL,
  651.                                     GTIN_Number, &portNumber,
  652.                                     TAG_DONE);
  653.                                 /* Reset port state */
  654.                                 portState=~0UL;
  655.  
  656.                                 break;
  657.  
  658.                             /* Sticky gadget */
  659.                             case GUI_STICKY_ID:
  660.  
  661.                                 /* Get sticky state */
  662.                                 GT_GetGadgetAttrs(stickyGadget,window,NULL,
  663.                                     GTCB_Checked, &sticky,
  664.                                     TAG_DONE);
  665.                                 break;
  666.  
  667.                             /* Mode gadget */
  668.                             case GUI_MODE_ID:
  669.  
  670.                                 /* Get mode */
  671.                                 GT_GetGadgetAttrs(modeGadget,window,NULL,
  672.                                     GTCY_Active, &mode,
  673.                                     TAG_DONE);
  674.  
  675.                                 /* Set joystick port attributes */
  676.                                 switch (mode) {
  677.  
  678.                                     case GUI_MODE_GAME_CONTROLLER:
  679.                                         SetJoyPortAttrs(portNumber,
  680.                                             SJA_Type, SJA_TYPE_GAMECTLR,
  681.                                             TAG_DONE);
  682.                                         break;
  683.  
  684.                                     case GUI_MODE_JOYSTICK:
  685.                                         SetJoyPortAttrs(portNumber,
  686.                                             SJA_Type, SJA_TYPE_JOYSTK,
  687.                                             TAG_DONE);
  688.                                         break;
  689.  
  690.                                     case GUI_MODE_MOUSE:
  691.                                         SetJoyPortAttrs(portNumber,
  692.                                             SJA_Type, SJA_TYPE_MOUSE,
  693.                                             TAG_DONE);
  694.                                         break;
  695.  
  696.                                     case GUI_MODE_AUTOSENSE:
  697.                                         SetJoyPortAttrs(portNumber,
  698.                                             SJA_Type, SJA_TYPE_AUTOSENSE,
  699.                                             TAG_DONE);
  700.                                         break;
  701.  
  702.                                 }
  703.  
  704.                                 break;
  705.  
  706.                             /* Reset gadget */
  707.                             case GUI_RESET_ID:
  708.  
  709.                                 /* Clear button status */
  710.                                 GT_SetGadgetAttrs(btn1Gadget,window,NULL,
  711.                                     GTCB_Checked, FALSE,
  712.                                     TAG_DONE);
  713.                                 GT_SetGadgetAttrs(btn2Gadget,window,NULL,
  714.                                     GTCB_Checked, FALSE,
  715.                                     TAG_DONE);
  716.                                 GT_SetGadgetAttrs(btn3Gadget,window,NULL,
  717.                                     GTCB_Checked, FALSE,
  718.                                     TAG_DONE);
  719.                                 GT_SetGadgetAttrs(btn4Gadget,window,NULL,
  720.                                     GTCB_Checked, FALSE,
  721.                                     TAG_DONE);
  722.                                 GT_SetGadgetAttrs(btn5Gadget,window,NULL,
  723.                                     GTCB_Checked, FALSE,
  724.                                     TAG_DONE);
  725.                                 GT_SetGadgetAttrs(btn6Gadget,window,NULL,
  726.                                     GTCB_Checked, FALSE,
  727.                                     TAG_DONE);
  728.                                 GT_SetGadgetAttrs(btn7Gadget,window,NULL,
  729.                                     GTCB_Checked, FALSE,
  730.                                     TAG_DONE);
  731.  
  732.                                 /* Clear direction status */
  733.                                 GT_SetGadgetAttrs(upGadget,window,NULL,
  734.                                     GTCB_Checked, FALSE,
  735.                                     TAG_DONE);
  736.                                 GT_SetGadgetAttrs(downGadget,window,NULL,
  737.                                     GTCB_Checked, FALSE,
  738.                                     TAG_DONE);
  739.                                 GT_SetGadgetAttrs(leftGadget,window,NULL,
  740.                                     GTCB_Checked, FALSE,
  741.                                     TAG_DONE);
  742.                                 GT_SetGadgetAttrs(rightGadget,window,NULL,
  743.                                     GTCB_Checked, FALSE,
  744.                                     TAG_DONE);
  745.  
  746.                             /* Default */
  747.                             default:
  748.                                 /* No action */
  749.                                 break;
  750.  
  751.                         }
  752.  
  753.                     }
  754.  
  755.                 /* Default */
  756.                 default:
  757.                     /* No action */
  758.                     break;
  759.  
  760.             }
  761.  
  762.         }
  763.  
  764.     }
  765.  
  766. }
  767.